/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦，本文采用木兰宽松许可证第2版]
 * 
 * https://zhiqim.org/project/zhiqim_kit/zhiqim_git.htm
 *
 * ZhiqimGit is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.git.constants;

import org.zhiqim.kernel.constants.SignConstants;

/**
 * Git配置常量表，对应文件${GIT_DIR}/config文件
 * 
 * https://www.kernel.org/pub/software/scm/git/docs/git-config.html
 */
public interface GitConfigConstants extends SignConstants
{
    /** 快捷方式 */
    public static enum SymLinks {FALSE, TRUE}

    /** 隐藏点开头的文件 */
    public static enum HideDotFiles {FALSE, TRUE, DOTGITONLY}
    
    /** 回车换行 */
    public static enum AutoCRLF {FALSE, TRUE, INPUT}
    
    /** 行结尾标志 */
    public static enum EOL {CRLF, LF, NATIVE}
    
    /** 行结尾流类型 */
    public static enum EolStreamType {TEXT_CRLF, TEXT_LF, AUTO_CRLF, AUTO_LF, DIRECT}
    
    /** 检查状态 */
    public static enum CheckStat {MINIMAL, DEFAULT}
    
    
    
    /*****************************************************************************************/
    //核心区域配置
    /*****************************************************************************************/
    
    /** 核心区域 */
    public static final String _SECTION_CORE_                                   = "core";

    /** 是否信任文件权限模式 true|false，当前默认取值为true */
    public static final String _KEY_FILE_MODE_                                  = "fileMode";
    
    /** 隐藏点开头的文件 true|false|dotGitOnly三种情况，缺省dotGitOnly （Windows有效） */
    public static final String _KEY_HIDE_DOT_FILES_                             = "hideDotFiles";
    
    /** 文件和目录是否忽略大小写 true|false，缺省false */
    public static final String _KEY_IGNORE_CASE_                                = "ignoreCase";
    
    /** 对文件名作UNICODE, true|false （MacOS有效）*/
    public static final String _KEY_PRECOMPOSE_UNICODE_                         = "precomposeUnicode";
    
    /** 查看状态 minimal|default（最小或缺省） */
    public static final String _KEY_CHECKSTAT_                                  = "checkStat";
    
    /** 行结尾标志，crlf|lf|native三种，缺省native，采用系统本地的 */
    public static final String _KEY_EOL_                                        = "eol";
    
    /** 文本属性是否自动换行 true|false|input三种 */
    public static final String _KEY_AUTOCRLF_                                   = "autocrlf";
    
    /** 是否裸仓库 true| false */
    public static final String _KEY_BARE_                                       = "bare";
    
    /** 工作树，当非裸仓库且gitDir父目录不是工作目录时设置 */
    public static final String _KEY_WORKTREE_                                   = "worktree";
    
    /** 是否所有引用更新记录日志 true|false，默认取true */
    public static final String _KEY_LOG_ALL_REF_UPDATES_                        = "logAllRefUpdates";
    
    /** 仓库格式版本 */
    public static final String _KEY_REPOSITORY_FORMAT_VERSION_                  = "repositoryFormatVersion";
    
    /** 压缩级别 -1 .. 9之间数字，0表示不压缩，缺省-1表示zlib，1-9表示压缩速度，9最慢 */
    public static final String _KEY_COMPRESSION_                                = "compression";
    
    /** 缓存最大字节数，缺省96 MiB */
    public static final String _KEY_DELTA_BASE_CACHE_LIMIT_                     = "deltaBaseCacheLimit";
    
    /** 支持的最大文件大小，deflated格式，未压缩 */
    public static final String _KEY_BIG_FILE_THRESHOLD_                         = "bigFileThreshold";
    
    /** 支持的最大文件大小，默认50MiB */
    public static final int _DEFAULT_BIG_FILE_THRESHOLD_                        = 50 * 1024 * 1024;
    
    /** 排除文件 */
    public static final String _KEY_EXCLUDESFILE_                               = "excludesfile";
    
    /** 同步文件对象 */
    public static final String _KEY_FSYNC_OBJECT_FILES_                         = "fsyncObjectFiles";
    
    /*****************************************************************************************/
    //核心DFS区域配置
    /*****************************************************************************************/
    
    /** DFS子区域 [core "dfs"] */
    public static final String _SUB_SECTION_DFS_                                = "dfs";
    
    /** 流文件阈值 */
    public static final String _KEY_STREAM_FILE_TRESHOLD_                       = "streamFileThreshold";
    
    /** 块最大值 */
    public static final String _KEY_BLOCK_LIMIT_                                = "blockLimit";
    
    /** 块大小值 */
    public static final String _KEY_BLOCK_SIZE_                                 = "blockSize";
    
    
    /*****************************************************************************************/
    //远程区域配置
    /*****************************************************************************************/
    
    /** 远程区域 */
    public static final String _SECTION_REMOTE_                                 = "remote";
    
    /** 远程URL */
    public static final String _KEY_URL_                                        = "url";
    
    
    /*****************************************************************************************/
    //分枝区域配置
    /*****************************************************************************************/
    
    /** 分枝区域 */
    public static final String _SECTION_BRANCH_                                 = "branch";
    
    /** 自动设置合并 true|false|always 缺省true，always当本地或远程跟踪分枝时开启 */
    public static final String _KEY_AUTO_SETUP_MERGE_                           = "autoSetupMerge";

    /** 自动设置rebase never|remote|always 缺省never */
    public static final String _KEY_AUTOSETUPREBASE_                            = "autosetuprebase";
    
    /** 自动设置值 */
    public static final String _VALUE_ALWAYS_                                   = "always";

    /** 自动设置值 */
    public static final String _VALUE_NEVER_                                    = "never";
    
    /** 远程 */
    public static final String _KEY_REMOTE_                                     = "remote";
    
    /** 合并 */
    public static final String _KEY_MERGE_                                      = "merge";

    /** 合并参数 */
    public static final String _KEY_MERGEOPTIONS_                               = "mergeOptions";
    
    /*****************************************************************************************/
    //对比区域配置
    /*****************************************************************************************/

    public static final String _SECTION_DIFF_                                   = "diff";
    
    /** 算法 */
    public static final String _KEY_ALGORITHM_                                  = "algorithm";

    /*****************************************************************************************/
    //垃圾回收区域配置
    /*****************************************************************************************/
    
    /** GC */
    public static final String _SECTION_GC_                                     = "gc";
    
    /** 增量压缩算法 depth缺省值 */
    public static final int _VALUE_AGGRESSIVE_DEPTH_DEFAULT_                    = 250;

    /** 增量压缩算法 window缺省值 */
    public static final int _VALUE_GC_AGGRESSIVE_WINDOW_DEFAULT_                = 250;
    
    /** GC默认删除2周之前的数据，可设置now｜never，now表示立即 */
    public static final String _KEY_PRUNEEXPIRE_                                = "pruneExpire";
    
    /*****************************************************************************************/
    //合并区域配置
    /*****************************************************************************************/
    
    /** 合并 */
    public static final String _SECTION_MERGE_                                  = "merge";
    
    /** 是否创建额外的合并 true|false|only，默认true */
    public static final String _KEY_FF_                                         = "ff";
    
    /*****************************************************************************************/
    //包区域配置
    /*****************************************************************************************/
    
    /** 包区域 */
    public static final String _SECTION_PACK_                                   = "pack";
    
    /** 增量窗口值，缺省10 */
    public static final String _KEY_WINDOW_                                     = "window";
    
    /** 增量窗口缺省值 */
    public static final int _DEFAULT_WINDOW_                                    = 10;
    
    /** 内存最大值，0表示不限制 */
    public static final String _KEY_WINDOW_MEMORY_                              = "windowMemory";
    
    /** 最大缓存，缺省256MiB */
    public static final String _KEY_DELTA_CACHE_SIZE_                           = "deltaCacheSize";
    
    /** 最大缓存缺省值定义为50MiB */
    public static final long _DEFAULT_DELTA_CACHE_SIZE_                         = 50 * 1024 * 1024;
    
    /** 最大缓存数目 */
    public static final String _KEY_DELTA_CACHE_LIMIT_                          = "deltaCacheLimit";
    
    /** 最大缓存数目，缺省100个 */
    public static final int _DEFAULT_DELTA_CACHE_LIMIT_                         = 100;
    
    /** 最大增量深度，缺省50 */
    public static final String _KEY_DEPTH_                                      = "depth";
    
    /** 最大增量深度缺省值 */
    public static final int _DEFAULT_DEPTH_                                     = 50;
    
    /** 线程数，为零自动检测CPU数为缺省值 */
    public static final String _KEY_THREADS                                     = "threads";
    
    /** 索引版本，V1.5.2之后默认版本2，支持大于4G和防损坏 */
    public static final String _KEY_INDEX_VERSION_                              = "indexVersion";
    
    /** 缺省版本2 */
    public static final int _DEFAULT_INDEX_VERSION_                             = 2;
    
    /*****************************************************************************************/
    //整理包（repack）区域配置
    /*****************************************************************************************/
    
    /** 整理包区域 */
    public static final String _SECTION_REPACK_                                 = "repack";
    
    /** 使用增量偏移 */
    public static final String _KEY_USE_DELTA_BASE_OFFSET_                      = "useDeltaBaseOffset";
    
    /*****************************************************************************************/
    //子模块区域配置
    /*****************************************************************************************/
    
    /** 子模块 [submodule "${path}"] */
    public static final String _SECTION_SUBMODULE_                              = "submodule";
    
    /** 子模块 path */
    public static final String _KEY_PATH_                                       = "path";
    
    /** 子模块更新 */
    public static final String _KEY_UPDATE_                                     = "update";
    
    /** 忽略子模块 all|dirty|none三种情况 @since 3.6 */
    public static final String _KEY_IGNORE_                                     = "ignore";
    
    /*****************************************************************************************/
    //传输区域配置
    /*****************************************************************************************/
    
    /** 传输 [transfer] */
    public static final String _SECTION_TRANSFER_                               = "transfer";
    
    /** 当[fetch.fsckObjects]或者 [receive.fsckObjects]没有设置，则取[transfer.fsckObjects], 缺省false. */
    public static final String _KEY_FSCK_OBJECTS_                               = "fsckObjects";
    
    /*****************************************************************************************/
    //推送区域配置
    /*****************************************************************************************/
    
    /** 推送 */
    public static final String _SECTION_PULL_                                   = "pull";
    
    /** rebase */
    public static final String _KEY_REBASE_                                     = "rebase";
    
    /*****************************************************************************************/
    //接收区域配置
    /*****************************************************************************************/
    
    /** 接收 */
    public static final String _SECTION_RECEIVE_                                = "receive";
    
    /** 设置密钥种子，生成传输时HMAC密钥 */
    public static final String _KEY_CERT_NONCE_SEED_                            = "certNonceSeed";
    
    /** 证书验证坡度，默认0 */
    public static final String _KEY_CERT_NONCE_SLOP_                            = "certNonceSlop";
    
    /** 禁止通过协议删除 */
    public static final String _KEY_DENY_DELETES_                               = "denyDeletes";
    
    /** 禁止通过协议强制更新 */
    public static final String _KEY_DENY_NON_FAST_FORWARDS_                     = "denyNonFastForwards";
    
    /*****************************************************************************************/
    //上传包区域配置
    /*****************************************************************************************/
    
    /** 上传包 */
    public static final String _SECTION_UPLOADPACK_                             = "uploadpack";

    /** 隐藏引用列表，试图获取一个隐藏引用会失败 */
    public static final String _KEY_HIDE_REFS_                                  = "hideRefs";

    /** 是否允许从一个隐藏引用提示中获取对象，在隐藏引用列表中也可以查 */
    public static final String _KEY_ALLOW_TIP_SHA1_IN_WANT_                     = "allowTipSHA1InWant";
    
    /** 是否允许从任一引用提示中获取对象，（任一地方查找比较麻烦，成本较多），默认false */
    public static final String _KEY_ALLOW_REACHABLE_SHA1_IN_WANT_               = "allowReachableSHA1InWant";
}
